import java.util.LinkedList;
import java.util.Queue;

public class demo2 {
    int[]dx={0,0,1,-1};
    int[]dy={1,-1,0,0};
    boolean[][]arr;
    public int numEnclaves(int[][] grid) {
        int m=grid.length;
        int n=grid[0].length;
        int sum=0;
        arr=new boolean[m][n];
        for (int i = 0; i <m ; i++) {
            for (int j = 0; j <n ; j++) {
                if(grid[i][j]==1)sum++;
            }
        }
        Queue<int[]>queue=new LinkedList<>();

        //这样四个角都会重复加入(使用边界时都需要注意这个问题)
        for(int i=0;i<m;i++){
            if(grid[i][0]==1&&!arr[i][0]){//不加!arr[i][0]如果grid[0][0]==1则会加入两次
                queue.add(new int[]{i,0});
                arr[i][0]=true;
            }
            if(grid[i][n-1]==1&&!arr[i][n-1]){
                queue.add(new int[]{i,n-1});
                arr[i][n-1]=true;
            }
        }
        for(int j=0;j<n;j++){
            if(grid[0][j]==1&&!arr[0][j]){
                queue.add(new int[]{0,j});
                arr[0][j]=true;
            }
            if(grid[m-1][j]==1&&!arr[m-1][j]){
                queue.add(new int[]{m-1,j});
                arr[m-1][j]=true;
            }
        }
        int sum1=0;
        while (!queue.isEmpty()){
            sum1++;
            int[] dp = queue.poll();
            int a=dp[0];
            int b=dp[1];
           // arr[a][b]=true;   可以不用
            for (int j = 0; j <4 ; j++) {
                int x=a+dx[j];
                int y=b+dy[j];
                if(x>=0&&x<m&&y>=0&&y<n&&!arr[x][y]&&grid[x][y]==1){
                    arr[x][y]=true;
                    queue.add(new int[]{x,y});
                }
            }
        }
        return sum-sum1;
    }
}
